package com.xiaoshuidi.cloud.module.rooms.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.xiaoshuidi.cloud.framework.common.pojo.CommonResult;
import com.xiaoshuidi.cloud.framework.common.pojo.PageResult;
import com.xiaoshuidi.cloud.module.rooms.controller.admin.roomentrust.vo.AssignPrincipalVO;
import com.xiaoshuidi.cloud.module.rooms.controller.admin.roomentrust.vo.RoomEntrustAddUpdateVO;
import com.xiaoshuidi.cloud.module.rooms.controller.admin.roomentrust.vo.RoomEntrustPageReqVO;
import com.xiaoshuidi.cloud.module.rooms.controller.admin.roomentrust.vo.RoomEntrustRespVO;
import com.xiaoshuidi.cloud.module.rooms.controller.admin.roomentrust.vo.RoomEntrustStatisticsVO;
import com.xiaoshuidi.cloud.module.rooms.controller.admin.roomentrust.vo.RoomEntrustUpdateStatusVO;
import com.xiaoshuidi.cloud.module.rooms.controller.admin.roomentrust.vo.RoomEntrustVO;
import com.xiaoshuidi.cloud.module.rooms.pojo.RoomEntrust;

import java.util.List;

public interface RoomEntrustService extends IService<RoomEntrust> {
    /**
     * 新增业主委派
     *
     * @param roomEntrustAddUpdateVO
     * @param userId
     * @return
     */
    Long roomEntrustAdd(RoomEntrustAddUpdateVO roomEntrustAddUpdateVO);

    /**
     * 指派委托人
     * @param assignPrincipalVO
     * @return
     */
    Boolean assignPrincipal(AssignPrincipalVO assignPrincipalVO);

    /**
     * 编辑业主委托
     * @param roomEntrustAddUpdateVO
     * @return
     */
    Boolean roomEntrustUpdate(RoomEntrustAddUpdateVO roomEntrustAddUpdateVO);

    /**
     * 改变委托工作流节点状态
     * @param roomEntrustUpdateStatusVO
     * @return
     */
    Boolean roomEntrustStatusUpdate(RoomEntrustUpdateStatusVO roomEntrustUpdateStatusVO);

    /**
     * 删除委托
     * @param entrustId
     * @return
     */
    Boolean roomEntrustDelete(Long entrustId);

    /**
     * 根据委托主键查询委托详情
     * @param entrustId
     * @return
     */
    RoomEntrustRespVO getRoomEntrustById(Long entrustId);

    /**
     * 获取所有状态的统计信息
     * @return
     */
    List<RoomEntrustStatisticsVO> getRoomEntrustStatistics();

    /**
     * 查询各种状态下委托列表
     * @param roomEntrustPageReqVO
     * @return
     */
    PageResult<RoomEntrustVO> roomEntrustPage(RoomEntrustPageReqVO roomEntrustPageReqVO);

    /**
     * 未完成的委托数量
     * @return
     */
    CommonResult<Long> toBeContinuedEntrustNum();
}
